const http = require('http');
const fs = require("fs");
const path = require("path");
const DIRNAME = __dirname;
// 创建http服务器
const server = http.createServer();
// 处理request请求事件
/**
 * 模拟实现一个appach服务器
 *  Apach服务器有一个默认的www目录，所有存放在www目录中的资源都可以通过网址来访问
 *  localhost:80/a.txt
 *  localhost:80/index.html
 *  localhost:80/apple/login.html
 * 
 */
server.on("request", function (req, res) {
    let url = req.url;
    // if(url === "/"){
    //     res.end("Hello world!")
    // } else {
    //     res.end("404 not found")
    // }
    var $index = new RegExp(/\.(index)$/);
    var $txt = new RegExp(/\.(txt)$/);
    var $img = new RegExp(/\.(jpg|png|gif)$/);
    // 什么都不加 就直接显示文件目录
    let content = "";
    let filepath = url;
    if (url === "/" || url.indexOf(".") === -1) {
        var files = fs.readdirSync(getPath(url), {})

        // 使用模板字符串来渲染tr td来创建表格
        files.forEach((item) => {
            content += `
                <tr>
                    <td data-value="apple/"><a class="icon dir" href="/${item}">${item}</a>
                    </td>
                    <td class="detailsColumn" data-value="0"></td>
                    <td class="detailsColumn" data-value="1587734116">2020/4/24 下午9:15:16</td>
                </tr>
                `
        })
        filepath = "/template.html";
    }

    fs.readFile(getPath(filepath), function (err, data) {
        console.log(getPath(filepath), err)
        if (err) {
            res.end("404 not found!");
            return;
        }
        if (filepath === "/template.html") {
            data = data.toString().replace("^_^", content);
        } else if ($index.test(url)) {
            res.writeHead(200, { 'Content-Type': 'text/html', 'charset': 'UTF-8' })
        } else if ($txt.test(url)) {
            res.writeHead(200, { 'Content-Type': 'text/plain', 'charset': 'UTF-8' })
        } else if ($img.test(url)) {
            res.writeHead(200, {})
        }
        res.end(data);
    })
})

function getPath(url) {
    return path.resolve(DIRNAME, "../www" + url);
}
// 监听端口
server.listen(4000, function (err) {
    console.log("listening 3000");
})